package com.example.test.advice.第八章_异常.建议116_异常只为异常服务;

import java.io.File;
import java.io.FileInputStream;

/**
 * 异常只为异常服务
 */
public class ExceptionOnlyServiceForException {

    public static void main(String[] args) {
        boolean f = contains(EnumSeason.class,"Sprisng");
        System.out.println(f);
    }

    /**
     * 本例子用异常处理的业务逻辑有什么缺点呢？
     * 1、异常判断降低了系统性能
     * 2、降低了代码的可读性，只有详细了解valueof方法的人才能读懂这样的代码，因为valueof抛出的是一个非检查异常
     * 3、隐藏了运行期可能产生的错误，catch到异常，但没有做任何处理
     * @param c
     * @param name
     * @param <T>
     * @return
     */
    //判断一个枚举是否包含String枚举项
    public static <T extends Enum<T>> boolean contain(Class<T> c,String name){
        boolean result = false;
        try {
            Enum.valueOf(c,name);
            return true;
        }catch (Exception e){
            //只要是抛出异常，则认为是不包含
        }
        return result;
    }
    //正确做法
    public static <T extends Enum<T>> boolean contains(Class<T> c,String name){
        boolean result = false;
        for(T t:c.getEnumConstants()){
            if(t.name().equals(name)){
                return true;
            }
        }
        return false;
    }
}
